//Prioriza cartas con el mismo número. Si no las tiene jugará cartas con el mismo color.
//Si no encuentra, jugará cartas especiales.En última instancia jugará cartas de comodín.

package UnoBots;

import Cards.UnoCard;

public class BotNumbers extends BotPlayerUNO{
    
    
    public BotNumbers(String s){
        super(s);
    }
    
    /**
     * This method check the next card to play.
     * @return true if the player have a card to play
     */
    
    @Override
    protected boolean chooseCardToPlay(){
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKETWO)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKETWO)){
                    playCard(c);
                    return true;
                }
            }
        }
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKEFOUR)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKEFOUR)){
                    playCard(c);
                    return true;
                }
            }
        }
        //Busca una carta con el mismo número que la que hay en lo alto de la pila.
        for (UnoCard c : hand){
            if (c.getRank().equals(currentGame.getTopCard().getRank())){
                playCard(c);
                return true;
            }
        }
        //Si no la encuentra, busca una con el mismo color.
        for (UnoCard c : hand){
            if (c.getSuit().equals(currentGame.getTopCard().getSuit()) || c.getSuit().equals(currentGame.getColour())){
                playCard(c);
                return true;
            }
        }
        //Si no la encuentra, busca alguna especial que jugar.
        for (UnoCard c : hand){
            if (canPlay(c) && c.isSpecialCard()){
                playCard(c);
                return true;
            }
        }
        //Por último, intentará jugar una carta comodín, roba 4 o cambio de color.
        for (UnoCard c : hand){
            if (c.isJoker()){
                playCard(c);
                return true;
            }
        }
        System.err.println("This should not be shown");
        return false;
    }
}
